package main

import (
        "context"
        "fmt"
        v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/rest"
        "time"
        "log"
)

func main() {
	fmt.Println(`
Author: Vzerx@zcloudedu
Version: v1.0
Description: 用于学习RBAC的授权过程
`)

	config, err := rest.InClusterConfig()
	if err != nil {
		log.Fatalf("无法获取集群配置，确认在K8S集群中其中本应用: %v", err)
	}

	client, err := kubernetes.NewForConfig(config)
	// 1.初始化连接集群失败处理
	if err != nil {
		fmt.Println("连接集群失败")
	}

	// 2.查询default命名空间下的pods
	fmt.Println("正在获取Default下的Pod列表...")
	podList, err := client.CoreV1().Pods("default").List(context.TODO(), v1.ListOptions{})
	if err != nil {
		fmt.Printf("获取Default下的Pod列表失败: %s\n", err.Error())
	}

	for _, pod := range podList.Items {
		fmt.Printf("命名空间: %s | Pod名称: %s\n", pod.Namespace, pod.Name)
		time.Sleep(time.Millisecond * 500)
	}

	// 3.查询default命名空间下的svg
	fmt.Println("正在获取Default下的Service列表...")
	svcList, err := client.CoreV1().Services("default").List(context.TODO(), v1.ListOptions{})
	if err != nil {
		fmt.Printf("获取Default下的Service列表失败: %s\n", err.Error())
	}

	for _, svc := range svcList.Items {
		fmt.Printf("命名空间: %s | Service名称: %s\n", svc.Namespace, svc.Name)
		time.Sleep(time.Millisecond * 500)
	}

	// 4.查询所有命名空间下的pods
	fmt.Println("正在获取所有Pod列表...")
	podList, err = client.CoreV1().Pods("").List(context.TODO(), v1.ListOptions{})
	if err != nil {
		fmt.Printf("获取所有Pod列表失败: %s\n", err.Error())
	}

	for _, pod := range podList.Items {
		fmt.Printf("命名空间: %s | Pod名称: %s\n", pod.Namespace, pod.Name)
		time.Sleep(time.Millisecond * 500)
	}

	// 5.查询所有命名空间下的svg
	fmt.Println("正在获取所有Service列表...")
	svcList, err = client.CoreV1().Services("").List(context.TODO(), v1.ListOptions{})
	if err != nil {
		fmt.Printf("获取所有Service列表失败: %s\n", err.Error())
	}

	for _, svc := range svcList.Items {
		fmt.Printf("命名空间: %s | Service名称: %s\n", svc.Namespace, svc.Name)
		time.Sleep(time.Millisecond * 500)
	}
	fmt.Println("查询完成")
	for {

	}
}
